package sanrenxing.dayEnd.backRepertoryTotal.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import sanrenxing.dayEnd.backRepertoryTotal.dao.TransactionDao;
import sanrenxing.dayEnd.backRepertoryTotal.domain.SettingOfSecuritiesLXF;
import sanrenxing.dayEnd.backRepertoryTotal.domain.Transaction;
import sanrenxing.dayEnd.backRepertoryTotal.service.TransactionService;

import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @desrciption 证券交易数据 控制器类
 * @auth：yidu   李小锋
 * @date:2021/3/12 0012 - 9:12
 * @version:1:0
 */
@RestController//风格
@RequestMapping("/Trans")//进入核心界面名字
public class TransactionController {
    //自动装配  业务处理方法
    @Autowired
    private TransactionService transactionService;

    //dao对象
    @Autowired
    private TransactionDao transactionDao;

    /**
     * 分页查询
     * @param req 请求对象
     * @param page 页数
     * @param limit 行数
     * @return 返回map集合从后端填充数据到前端
     */
    @GetMapping("/action")
    public Map<String,Object> selectTrans(HttpServletRequest req, int page, int limit){
        //定义用于查询多条件对象
        Transaction transaction=new Transaction();
        //接收来自请求中的证券交易数据证券代码
        String seID = req.getParameter("mark");
        //判断证券代码不等于空切不等于零加入到证券交易数据中
        if(seID!=null&&seID.trim().length()!=0){
            transaction.setMark(Integer.parseInt(seID));
        }
        //接收来自请求中的证券交易数据中的交易日期
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        String tranDate = req.getParameter("tranDate");
        //判断交易日期不等于空切不等于零加入到证券交易数据中
        if(tranDate!=null&& tranDate.trim().length()!=0){
            try {
                transaction.setTranDate(simpleDateFormat.parse(tranDate));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        //调用数据方法根据权证对象构造多条件数据
        String getcondition = transactionService.getcondition(transaction);
        //执行多条件查询分页
        List<Transaction> transactionList=transactionService.findByPage(limit,page,getcondition);
        //多表查询表中总记录数
        int totalRows = transactionService.count(getcondition);
        //调用券商数据
        List<SettingOfSecuritiesLXF> settingOf = transactionService.findSettingOf();
        //定义映射集合对象
        Map<String,Object> mapData=new HashMap<>();
        //在映射集合中添加key为code，值为0的状态码
        mapData.put("code",0);
        //在映射集合中添加key为msg,值为响应信息字符串
        mapData.put("msg","");
        //在映射集合中添加key为count,值总行数的数据对
        mapData.put("count",totalRows);
        //在映射集合中添加key为data,值为员集合对象
        mapData.put("data",transactionList);
        //发送券商传递的数据
        mapData.put("setting",settingOf);
        mapData.put("fund",transactionService.findFund());
        mapData.put("exchange",transactionService.ExchangeVarietyRateLXF());
        mapData.put("securi",transactionService.SecuritiesInfomationLXF());
        mapData.put("trading",transactionService.TradingSeatLXF());
        mapData.put("cashAccount",transactionDao.queryCash());
        return mapData;
    }

    /**
     * 新增方法
     * @param transaction 对象
     * @return 0,failure 1，SUCCESS
     */
    @PostMapping("/action")
    public String add(@RequestBody Transaction transaction){
        //获取添加的行数
        int rwos=transactionService.add(transaction);
        //使用三元运算符判断
        return rwos>0?"add SUCCESS":"add failure";
    }

    /**
     * 删除方法
     * @param tranId 证券编号
     * @return 0,failure 1，SUCCESS
     */
    @DeleteMapping("/action/{tranId}")
    //PathVariable：接收请求路径中占位符的值括号中可有可无但是必须一样
    public String delete(@PathVariable("tranId") String tranId){
        //获取删除的行数
        int rwos=transactionService.delete(tranId);
        //使用三元运算符判断
        return rwos>0?"delete SUCCESS":"delete failure";
    }
    /**
     * 修改方法方法
     * @param transaction 对象
     * @return 0,failure 1，SUCCESS
     */
    @PutMapping("/action")
    //RequestBody:表示前端传递的json格式转化为javaBean即domain
    //ResponseBody:表示后端传递的javaBean格式转化为json格式
    public String update(@RequestBody Transaction transaction){
        //获取修改的行数
        int rwos=transactionService.update(transaction);
        //使用三元运算符判断
        return rwos>0?"update SUCCESS":"update failure";
    }

    /**
     * 批量删除
     * @param tranIdStr 数据证券ID
     * @return 0,failure 1，SUCCESS
     */
    @PutMapping("/batchBel/{tranIdStr}")
    public String batchBeleteById(@PathVariable("tranIdStr") String tranIdStr) {
        //对员工编号字符串按逗号分隔
        String[] empNos = tranIdStr.split(",");
        //定义返回值
        String result = "delete success";
        //循环遍历出证券数据id
        for (String tranId : empNos) {
            //调用业务层删除
            int rows = transactionService.delete(tranId);
            //判断
            if (rows <= 0) {
                return "batch delete failure";
            }
        }
        return result;
    }
}
